package com.hu.system.service.impl;

import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import com.github.pagehelper.PageHelper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.hu.common.utils.SecurityUtils;
import com.hu.system.mapper.ProfitStatisticsMapper;
import com.hu.system.mapper.SysUserShopMapper;
import com.hu.system.domain.ProfitStatistics;
import com.hu.system.service.IProfitStatisticsService;

/**
 * 利润统计Service业务层处理
 *
 * @author hu
 * @date 2025-01-21
 */
@Service
public class ProfitStatisticsServiceImpl implements IProfitStatisticsService {
    @Autowired
    private ProfitStatisticsMapper profitStatisticsMapper;

    @Autowired
    private SysUserShopMapper userShopMapper;

    /**
     * 查询利润统计列表
     *
     * @param profitStatistics 利润统计
     * @return 利润统计集合
     */
    @Override
    public List<ProfitStatistics> selectProfitStatisticsList(ProfitStatistics profitStatistics) {
        Long userId = SecurityUtils.getUserId();

        // 管理员查看全部
        if (userId == null || !SecurityUtils.isAdmin(userId)) {
            // 普通用户根据店铺过滤
            // 保存分页参数（因为查询店铺ID会消耗分页参数）
            com.github.pagehelper.Page<?> page = PageHelper.getLocalPage();
            // 清除分页参数，让店铺ID查询不使用分页
            PageHelper.clearPage();
            List<Long> shopIds = userShopMapper.selectShopIdsByUserId(userId);
            // 恢复分页参数，让主查询使用分页
            if (page != null) {
                PageHelper.startPage(page.getPageNum(), page.getPageSize(), page.getOrderBy());
            }
            if (shopIds == null || shopIds.isEmpty()) {
                return new ArrayList<>();
            }

            // 设置店铺ID过滤条件
            profitStatistics.getParams().put("shopIdList", shopIds);
        }

        // 直接从视图查询，所有计算已在视图中完成
        return profitStatisticsMapper.selectProfitStatisticsList(profitStatistics);
    }

    /**
     * 查询利润报表汇总统计数据
     *
     * @param profitStatistics 查询条件
     * @return 汇总统计数据
     */
    @Override
    public Map<String, Object> selectProfitSummary(ProfitStatistics profitStatistics) {
        Long userId = SecurityUtils.getUserId();

        // 管理员查看全部
        if (userId == null || !SecurityUtils.isAdmin(userId)) {
            // 普通用户根据店铺过滤
            List<Long> shopIds = userShopMapper.selectShopIdsByUserId(userId);
            if (shopIds == null || shopIds.isEmpty()) {
                // 返回空统计对象
                Map<String, Object> emptyStats = new HashMap<>();
                emptyStats.put("totalProfit", BigDecimal.ZERO);
                emptyStats.put("totalIncome", BigDecimal.ZERO);
                emptyStats.put("totalCost", BigDecimal.ZERO);
                emptyStats.put("avgProfitRate", BigDecimal.ZERO);
                return emptyStats;
            }

            // 设置店铺ID过滤条件
            profitStatistics.getParams().put("shopIdList", shopIds);
        }

        // 从数据库查询汇总数据
        Map<String, Object> summary = profitStatisticsMapper.selectProfitSummary(profitStatistics);
        
        return summary != null ? summary : new HashMap<>();
    }
}

